<?php
 /**
 * Fonctions de gestion AJAX
 * @package Garennes
 * @author Jean-Francois Campan <jean-francois.campan@ac-poitiers.fr>
 * @version 0.1
 */
 
 /**
 * Fonction qui renvoi le javascript de creation d'un objet AJAX
 * @return string Fonction complete
 */
 Function ajax_objet ()
  {
   $ligne = "function ajax_objet(){" ;
   // On regarde si le navigateur est ie
   $ligne .= "if(window.ActiveXObject){return new ActiveXObject(\"Microsoft.XMLHTTP\");}" ;
   // On regarde tous les autres
   $ligne .= "else if(window.XMLHttpRequest){return new XMLHttpRequest;}" ;
   // Sinon imposible
   $ligne .= "else{alert (\"AJAX n'est pas compatible avec votre navigateur !\");return null;}}" ;
   Return $ligne ;
  }
 
 /**
 * Fonction qui renvoi le javascript de la transmission de donnees AJAX
 * @return string Fonction complete
 */
 Function ajax_transmission ()
  {
   // Fonction d'ouverture de la transmission
   // mode : GET ou POST
   // adresse : Adresse de la page a appeler
   // type_comm : False (synchrone) ou true (asynchrone)
   // reponse : Objet pour la reponse
   $ligne = "function ajax_transmission(adresse,type_comm,reponse){" ;
   $ligne .= "objet_http=ajax_objet();" ;
   $ligne .= "if(objet_http!=null){" ;
   $ligne .= "objet_http.open('GET',adresse,type_comm);" ;
   $ligne .= "objet_http.onreadystatechange=function(){if(objet_http.readyState==4){ajax_retour(reponse);}};" ;
   $ligne .= "objet_http.send(null);" ;
   $ligne .= "}}" ;
   Return $ligne ;
  }
 
 /**
 * Fonction qui renvoi le javascript de detection de la position de la souris
 * @return string Fonction complete
 */
 Function ajax_souris()
  {
   $ligne = "var ajax_souris_x;var ajax_souris_y;" ;
   $ligne .= "function ajax_souris(e){var DocRef;" ;
   $ligne .= "if(e){ajax_souris_x=e.pageX;ajax_souris_y=e.pageY;}" ;
   $ligne .= "else{" ;
   $ligne .= "ajax_souris_x=event.clientX;ajax_souris_y=event.clientY;" ;
   $ligne .= "if(document.documentElement && document.documentElement.clientWidth){DocRef=document.documentElement;}else{DocRef=document.body;}" ;
   $ligne .= "ajax_souris_x+=DocRef.scrollLeft;" ;
   $ligne .= "ajax_souris_y+=DocRef.scrollTop;" ;
   $ligne .= "}}" ;
   $ligne .= "document.onmousemove=ajax_souris;" ;
   Return $ligne ;
  }

 /**
 * Renvoi l'ensemble des fonctions javascript de gestion de l'AJAX
 * @param string $contenu_fonction Javascript de gestion du retour de la reponse
 * @return string Fonctions javascript complet
 */
 Function ajax ($contenu_fonction)
  {
   $ligne = "<script type=\"text/javascript\">" ;
   $ligne .= ajax_souris() ;
   $ligne .= ajax_objet () ;
   $ligne .= ajax_transmission () ;
   $ligne .= "function ajax_retour(){".$contenu_fonction."}" ;
   $ligne .= "function ajax_affiche(nom_calque){document.getElementById(nom_calque).style.display='';}" ;
   $ligne .= "function ajax_efface(nom_calque){document.getElementById(nom_calque).style.display='none';}" ;
   $ligne .= "function ajax_debut(nom_calque,largeur,hauteur){" ;
   $ligne .= "var pos_x=ajax_souris_x||(screen.width-largeur)/2;" ;
   $ligne .= "var pos_y=ajax_souris_y+10||(screen.height-hauteur)/3;" ;
   $ligne .= "document.getElementById(nom_calque).style.left=pos_x;" ;
   $ligne .= "document.getElementById(nom_calque).style.top=pos_y;" ;
   $ligne .= "document.getElementById(nom_calque).style.width=largeur;" ;
   $ligne .= "document.getElementById(nom_calque).style.height=hauteur;" ;
   $ligne .= "ajax_affiche(nom_calque);" ;
   $ligne .= "}" ;
   $ligne .= "</script>" ;
   Return $ligne ;
  }

// Password strength
// Based from code by:
// Matthew R. Miller - 2007
// www.codeandcoffee.com
// originally released as "free software license"

/*
  Password Strength Algorithm:

  Password Length:
    5 Points: Less than 4 characters
    10 Points: 5 to 7 characters
    25 Points: 8 or more

  Letters:
    0 Points: No letters
    10 Points: Letters are all lower case
    20 Points: Letters are upper case and lower case

  Numbers:
    0 Points: No numbers
    10 Points: 1 number
    20 Points: 3 or more numbers

  Characters:
    0 Points: No characters
    10 Points: 1 character
    25 Points: More than 1 character

  Bonus:
    2 Points: Letters and numbers
    3 Points: Letters, numbers, and characters
    5 Points: Mixed case letters, numbers, and characters

  Password Text Range:

    >= 90: Very Secure
    >= 80: Secure
    >= 70: Very Strong
    >= 60: Strong
    >= 50: Average
    >= 25: Weak
    >= 0: Very Weak

// Settings
// -- Toggle to true or false, if you want to change what is checked in the password
var m_strUpperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var m_strLowerCase = "abcdefghijklmnopqrstuvwxyz";
var m_strNumber = "0123456789";
var m_strCharacters = "!@#$%^&*?_~"

// Check password
function checkPassword(strPassword)
{
  // Reset combination count
  var nScore = 0;

  // Password length
  // -- Less than 4 characters
  if (strPassword.length < 5)
  {
    nScore += 5;
  }
  // -- 5 to 7 characters
  else if (strPassword.length > 4 && strPassword.length < 8)
  {
    nScore += 10;
  }
  // -- 8 or more
  else if (strPassword.length > 7)
  {
    nScore += 25;
  }

  // Letters
  var nUpperCount = countContain(strPassword, m_strUpperCase);
  var nLowerCount = countContain(strPassword, m_strLowerCase);
  var nLowerUpperCount = nUpperCount + nLowerCount;
  // -- Letters are all lower case
  if (nUpperCount == 0 && nLowerCount != 0)
  {
    nScore += 10;
  }
  // -- Letters are upper case and lower case
  else if (nUpperCount != 0 && nLowerCount != 0)
  {
    nScore += 20;
  }

  // Numbers
  var nNumberCount = countContain(strPassword, m_strNumber);
  // -- 1 number
  if (nNumberCount == 1)
  {
    nScore += 10;
  }
  // -- 3 or more numbers
  if (nNumberCount >= 3)
  {
    nScore += 20;
  }

  // Characters
  var nCharacterCount = countContain(strPassword, m_strCharacters);
  // -- 1 character
  if (nCharacterCount == 1)
  {
    nScore += 10;
  }
  // -- More than 1 character
  if (nCharacterCount > 1)
  {
    nScore += 25;
  }

  // Bonus
  // -- Letters and numbers
  if (nNumberCount != 0 && nLowerUpperCount != 0)
  {
    nScore += 2;
  }
  // -- Letters, numbers, and characters
  if (nNumberCount != 0 && nLowerUpperCount != 0 && nCharacterCount != 0)
  {
    nScore += 3;
  }
  // -- Mixed case letters, numbers, and characters
  if (nNumberCount != 0 && nUpperCount != 0 && nLowerCount != 0 && nCharacterCount != 0)
  {
    nScore += 5;
  }


  return nScore;
}

// Checks a string for a list of characters
function countContain(strPassword, strCheck)
{
  // Declare variables
  var nCount = 0;

  for (i = 0; i < strPassword.length; i++)
  {
    if (strCheck.indexOf(strPassword.charAt(i)) > -1)
    {
            nCount++;
    }
  }

  return nCount;
}
*/
?>